package com.hwd.srb.core.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hwd.srb.core.pojo.entity.UserInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hwd.srb.core.pojo.query.UserInfoQuery;
import com.hwd.srb.core.pojo.vo.LoginVO;
import com.hwd.srb.core.pojo.vo.RegisterVO;
import com.hwd.srb.core.pojo.vo.UserInfoVO;

/**
 * <p>
 * 用户基本信息 服务类
 * </p>
 *
 * @author 黄伟东/Victor
 * @since 2022-03-10
 */
public interface UserInfoService extends IService<UserInfo> {

    /**
     * 校验手机验证码
     *
     * @param code   验证码
     * @param mobile 手机号
     * @return boolean 正确返回true，错误返回false
     */
    boolean checkSmsCode(String code, String mobile);

    /**
     * 用户注册
     *
     * @param registerVO 用户注册信息
     */
    void register(RegisterVO registerVO);

    /**
     * 用户登录
     *
     * @param loginVO 用户登录信息
     * @param ip      ip地址
     * @return com.hwd.srb.core.pojo.vo.UserInfoVO
     */
    UserInfoVO login(LoginVO loginVO, String ip);

    /**
     * 分页查询会员分页列表
     *
     * @param pageParam     分页参数
     * @param userInfoQuery 查询条件对象
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.hwd.srb.core.pojo.entity.UserInfo>
     */
    IPage<UserInfo> listPage(Page<UserInfo> pageParam, UserInfoQuery userInfoQuery);

    /**
     * 解锁或锁定
     *
     * @param id     用户id
     * @param status 状态
     */
    void lock(Long id, Integer status);

    /**
     * 校验手机号是否注册
     *
     * @param mobile 手机号
     * @return boolean
     */
    boolean checkMobile(String mobile);

    /**
     * 根据bindCode获取userId
     *
     * @param bindCode 绑定协议号
     * @return java.lang.Long
     */
    Long getUserIdByBindCode(String bindCode);

    /**
     * 根据bindCode获取userInfo
     *
     * @param bindCode 绑定协议号
     * @return com.hwd.srb.core.pojo.entity.UserInfo
     */
    UserInfo getByBindCode(String bindCode);
}
